package cn.i96688.scanclient.utils;

import java.io.IOException;
import java.io.InputStream;
import java.io.StringReader;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import java.util.Set;

import cn.i96688.scanclient.bean.PayLog;


/**
 * 配置文件读取类
 *
 */
public class ConfParams 
{
	private static Map<String, String> properties = new HashMap<String, String>();
	
	
	/**
	 * 
	 * 获取配置文件所有key-value值
	 * 
	 * @return
	 * 		返回key-value集合，无返回空
	 */
	public static Map<String, String> getAllKeyValue() 
	{
		return properties;
	}
	
	/**
	 * 改变key对应的value值，请慎重调用改方法
	 * 
	 * @param key
	 * 		key
	 * @param value
	 * 		value
	 * 
	 * 如对应key存在，则修改，否则不做任何改动
	 */
	public static void setValueByKey(String key, String value) 
	{
		properties.put(key, value);
	}
	
	/**
	 * 根据 key 获取对应 value 值
	 * 
	 * @param key
	 * 		关键字key
	 * @return
	 * 		返回key对应的value值，如无将返回空
	 */
	public static String getValueByKey(String key)
	{
		if (properties == null || properties.isEmpty()) //未加载配置文件或配置文件未配置任何key-value值 
		{
			return null;
		}
		if (properties.containsKey(key))
		{
			return properties.get(key);
		}
		return null;
	}
	
	public static void readPropertiesConf() throws Exception 
	{
		InputStream in=null;
		Properties p = new Properties();
		try {
			in=ConfParams.class.getResourceAsStream("/common.properties");
			p.load(in);
			readFromProperties(p);
		} catch (Exception e) {
			PayLog.getInstance().addLog("读取配置文件出错");
			PayLog.getInstance().addLogs(e);
			throw e;
		}finally{
			try {
				if(in!=null)
					in.close();
			} catch (Exception e2) {
			}
		}
	}
	
	private static void readFromProperties(Properties p){
		/**
		 * 将配置文件的 key-value 保存到 Map 集合中
		 */
		Set<Object> keys = p.keySet();
		for (Object key: keys) 
		{
			String value=p.getProperty((String) key);
			if(value!=null)
				value=value.trim();
			properties.put((String) key, value);
		}
	}
	
	/**
	 * 
	 * @param filePath
	 * 		配置文件路径
	 * @return
	 * 		返回配置文件 key-value 集合
	 * @throws IOException
	 * 		出错抛出异常
	 */
	public static void readPropertiesConf(String filePath) throws Exception 
	{
		Properties p = new Properties();
		try
		{
			String str=PayUtil.readFile(filePath);
			p.load(new StringReader(str)); //加载到 Properties 对象
			readFromProperties(p);
		} 
		catch (Exception e) 
		{
			PayLog.getInstance().addLog("读取配置文件出错");
			PayLog.getInstance().addLogs(e);
			throw e;
		}
	}
}
